package com.linkai.pdd2021;

import java.util.Scanner;

/**
 * @Description:    多多君最近在研究某种数字组合：
 *              定义为：每个数字的十进制表示中(0~9)，每个数位各不相同且各个数位之和等于N。
 *              满足条件的数字可能很多，找到其中的最小值即可。
 *              输入：5
 *              输出：5
 *              输入：12       符合条件的数字有：5，14，23，32，41  其中最小值为5
 *              输出：50
 *              输入：-1
 *              https://www.nowcoder.com/test/question/3d6b53e097ea41bda049d111f30db28e?pid=30579184&tid=48838728
 *              
 * @Author: 林凯
 * @Date: 2021/10/8 21:35
 */
public class Main01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 5   ->  5    14      23      32      41      50
        // 12  -> 39    48      57      66      75      84      93
        // 50  -> -1
        int number = sc.nextInt();

        if (number >= 1 && number < 10) {   // 输入的数字小于10的话，直接返回他本身
            System.out.println(number);
            return;
        }
        if (number > 45) {       // 输入的数字大于 45 的话，直接返回 -1
            System.out.println(-1);
            return;
        }
        int num = 0;        // 最后要输出的数字
        int digit = 0;      // 用来表示当前已经有多少个数字了
        /*
            思路：要输出最小的数字，这肯定是要大数尽量在末尾，小数字尽量在前面
            所以从9开始向下遍历所有数字，依次添加到需要返回的数字的末尾
        * */
        for(int i = 9;i > 0;i--){
            // 这里要满足 i <= number，因为 number 在持续减小，number最终是要变为0的；
            // 有时候可能减小的跨度太大，不能满足0~9之前数字可以被number减去，所有要跳过这个数字
            if(number != 0 && i <= number){
                number -= i;
                num += (int)Math.pow(10, digit)*i;
                digit++;
            }
        }
        System.out.println(num);
    }
}
